\section{Enunciado}

El problema consistía en modificar el servidor dado por la cátedra, de forma tal que varios servidores puedan proveer un recurso compartido a sus clientes
sin deadlock, inanición, livelock.\\
El algoritmo para realizar esta sincronización es una implentación del algoritmo de Ricart y Agrawala.

\section{Solución}

Para realizar dicha tarea agregamos los handlers necesarios para cumplir con el protocolo servidor-cliente y entre servidores.
A su vez, tal como describe el paper, para mantener la sincronización y evitar que siempre un servidor tenga prioridad sobre los otros, agregamos
un número de secuencia para desempatar en caso de pedidos simultáneos.\\
La correcta implementación del algoritmo nos garantiza una solución libre de deadlock, livelock,
inanición o violación de la exclusión mutua.

\section{Tests}
Se agregan los siguientes Tests de caso exitoso:
\begin{itemize}
\item mpiexec -np 24 ./tp3  a 500 500 1 500 500 b 100 200 3 400 500 c 789 989 5 989 989 d 789 123 4 123 123 e 345 333 5 333 333 f 500 500 2 500 500 g 600 600 2 600 600 h 700 700 3 700 700 i 100 100 2 100 100 j 800 300 2 100 100 k 200 250 5 230 200 l 1000 1000 7 300 300 $>$/dev/null 
\item mpiexec -np 6 ./tp3  X 1000 2000 5 250 120 Y 1000 2000 8 250 250 Z 0 0 50 30 20 $>$/dev/null
\item mpiexec -np 24 ./tp3  a 2 5 1 50 50 b 10 20 3 40 50 c 789 989 5 989 989 d 789 123 4 123 123 e 345 333 5 333 333 f 50 500 2 50 100 g 60 60 2 100 100 h 700 70 3 70 700 i 100 90 2 20 30 j 800 30 2 100 10 k 20 250 5 230 20 l 10 100 7 20 300 $>$/dev/null
\item mpiexec -np 10 ./tp3  A 1000 2000 5 250 120 E 1000 2000 8 250 250 I 0 0 50 30 20 O 0 0 50 30 20 U 0 0 50 30 20 $>$/dev/null
\item mpiexec -np 10 ./tp3  A 1000 2000 5 250 120 E 1000 2000 8 250 250 I 100 200 50 30 20 O 1000 50 10 30 200 U 80 100 30 30 20 $>$/dev/null
\item mpiexec -np 12 ./tp3  a 10 10 10 300 2000 b 10 10 10 300 2000 c 10 10 10 300 2000 d 10 10 10 300 2000 e 10 10 10 300 2000 f 10 10 10 300 2000 $>$/dev/null
\item mpiexec -np 12 ./tp3  a 10 10 10 30 200 b 10 10 10 30 200 c 10 10 10 30 200 d 10 10 10 30 200 e 10 10 10 30 200 f 10 10 10 30 200 $>$/dev/null
\item mpiexec -np 12 ./tp3  a 10 60 10 80 200 b 20 50 10 70 300 c 30 40 10 60 400 d 40 30 10 50 500 e 50 20 10 40 600 f 60 10 10 30 700 $>$/dev/null
\item mpiexec -np 32 ./tp3  A 1000 2000 5 250 120 B 1000 2000 8 250 250 C 0 0 50 30 20 D 1000 2000 5 250 120 E 1000 2000 8 250 250 F 0 0 50 30 20 G 1000 2000 5 250 120 H 1000 2000 8 250 250 I 0 0 50 30 20 J 1000 2000 5 250 120 K 1000 2000 8 250 250 L 0 0 50 30 20 M 1000 2000 5 250 120 N 1000 2000 8 250 250 O 0 0 50 30 20 P 1000 2000 5 250 120 $>$/dev/null
\item mpiexec -np 52 ./tp3  A 1000 2000 5 250 120 B 1000 2000 8 250 250 C 0 0 50 30 20 D 1000 2000 5 250 120 E 1000 2000 8 250 250 F 0 0 50 30 20 G 1000 2000 5 250 120 H 1000 2000 8 250 250 I 0 0 50 30 20 J 1000 2000 5 250 120 K 1000 2000 8 250 250 L 0 0 50 30 20 M 1000 2000 5 250 120 N 1000 2000 8 250 250 O 0 0 50 30 20 P 1000 2000 5 250 120 Q 1000 2000 5 250 120 R 1000 2000 8 250 250 S 0 0 50 30 20 T 1000 2000 5 250 120 U 1000 2000 8 250 250 V 0 0 50 30 20 W 1000 2000 5 250 120 X 1000 2000 8 250 250 Y 0 0 50 30 20 Z 1000 2000 5 250 120 $>$/dev/null
\end{itemize}
